001    /***********************************************************************************************
002     *              Tekijä:                 Jukka Salminen
003     *              Opiskelijanumero:       i79947
004     *              Email:                  jukka.salminen@uwasa.fi
005     *              Tekoaika:               23.9.2002
006     *              Kurssi/vuosi:           Ohjelmoinnin jatkokurssi/kevät 2002
007     *              Työn tunnus:            Harjoitustyö: Taulukkoeditori web-sivulle
008     ***********************************************************************************************
009     * XMLData-luokka
010     *====================
011     * Tämän luokan metodeja kutsutaan QDParser-luokasta kun XML-dokumenttia
012     * parsitaan. Metodit startElement ja endElement tekevät päätyön. Luokka
013     * toteuttaa rajapinnan DocHandler.
014     *
015     * XML-dokumentista löydetyt elementit (tässä tapauksessa ainoat kiinnostavat
016     * elementit ovat <table>, <tr> ja <td>) talletetaan vektoreihin. Nämä vektorit
017     * muodostavat pääohjelman TableModelin. Valmis TableModel palautetaan metodissa
018     * getDataVector.
019     *
020     * Metodit
021     *--------
022     * startDocument        Ei erityistä tehtävää
023     * endDocument          Ei erityistä tehtävää
024     *
025     * startElement         Käsittelee aloittavat tagit
026     *
027     * endElement           Käsittelee lopettavat tagit
028     *
029     * text                 Lisää merkkejä m_sb-stringBufferiin
030     *
031     * getDataVector        Palauttaa valmiin datavektorin
032     *
033     * Jäsenmuuttujat
034     *---------------
035     *      m_vRows
036     *  -------
037     *  Vector               Datavektori, koostuu rivivektoreista
038     *
039     *      m_vRowVector
040     *  ------------
041     *  Vector               Datavektorin rivivektorit kloonataan tästä vektorista
042     *
043     *      m_sb
044     *  ----
045     *  StringBuffer        Koska Stringin käyttö on hidasta, kerätään taulukon alkoiden
046     *                      data tähän StringBufferiin, josta se edelleen talletetaan
047     *                      datavektoriin,
048     *
049     *
050     * Paikalliset muuttujat
051     *----------------------
052     * Ei ole
053     */
054    package jsxml;
055    
056    import jsxml.qdxml.*;
057    import java.util.Hashtable;
058    import java.util.Enumeration;
059    
060    import java.io.*;
061    import java.net.*;
062    import java.util.Vector;
063    
064    public class XMLdata implements DocHandler
065    {
066            Vector m_vRows = new Vector(10, 10);
067            Vector m_vRowVector = new Vector(10, 10);
068            private StringBuffer m_sb = new StringBuffer();
069            
070            // Implementation of DocHandler is below this line
071            public void startDocument()
072            {
073            }
074            public void endDocument()
075            {
076            }
077            public void startElement(String elem,Hashtable h)
078            {
079                    if(elem.equals("tr"))
080                    {
081                    }
082                    if (elem.equals("td"))
083                    {
084                            m_sb.setLength(0);
085    /*              Attribuutit pitäisi säilöä erikseen,
086     *              jos ne haluaa säilyttää.
087                    Enumeration e = h.keys();
088                            while(e.hasMoreElements())
089                            {
090                                    String key = (String)e.nextElement();
091                                    String val = (String)h.get(key);
092                                    m_sb.append(" "+key+"=\""+val+"\"");
093                            }
094    */
095                    }
096                    if(elem.equals("b") || elem.equals("strong"))
097                    {
098                            m_sb.append("<"+elem+">");
099                    }
100            }
101            public void endElement(String elem)
102            {
103                    if(elem.equals("tr"))
104                    {
105                            m_vRows.addElement(m_vRowVector.clone());
106                            m_vRowVector.clear();
107                            return;
108                    }
109                    if (elem.equals("td"))
110                    {
111                            m_vRowVector.addElement(m_sb.toString());
112                            m_sb.setLength(0);
113                            return;
114                    }
115                    if(elem.equals("b") || elem.equals("strong"))
116                    {
117                            m_sb.append("</"+elem+">");
118                    }
119            }
120            public void text(String text)
121            {
122                    m_sb.append(text);
123            }
124            // implementation of DocHandler is above this line
125            public Vector getDataVector()
126            {
127                    return m_vRows;
128            }
129    }